package com.dinkshow.dinkshow.util;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import java.io.Serializable;
import java.util.Date;

/**
 * @author yuwc
 * @description 实体类基础实现
 * @data 2019/5/22 0022上午 8:52
 *  * 备注
 *  * @Id ：指定主键
 *  * @GeneratedValue：指定主键生成规则，默认自增
 *  * @MappedSuperclass：加了此注解的类将不是一个完整的实体类，他将不会映射到数据库表，
 *  * 但是他的属性都将映射到其子类的数据库字段中。不能再标注@Entity或@Table注解，
 *  * 也无需实现序列化接口。这样的类还可以直接标注@EntityListeners实体监听器。
 *  * @EntityListeners：声明实体监听器，用于实体修改时做处理（切面编程）
 *  同时这个注解可以 用  @CreatedDate 或者 @LastModifiedDate
 *
 *      @GeneratedValue(strategy = GenerationType.AUTO) ==   @GeneratedValue 直接 @GeneratedValue 默认自增用jpa自增策略
 */
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity implements Serializable {
    private static final long serialVersionUID = -7674269980281525370L;
    @Id
    @GeneratedValue
    protected Long id;
    @CreatedDate
    protected Date createDate;
    @LastModifiedDate
    protected Date modifyDate;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    public Date getModifyDate() {
        return modifyDate;
    }

    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }
}
